{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Data Simulation"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.preprocessing import StandardScaler, OneHotEncoder\n",
    "from sklearn.compose import ColumnTransformer\n",
    "from sklearn.pipeline import Pipeline\n",
    "from sklearn.linear_model import LogisticRegression\n",
    "from sklearn.ensemble import RandomForestClassifier, GradientBoostingClassifier\n",
    "from sklearn.metrics import classification_report, confusion_matrix, roc_auc_score\n",
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "customer_churn.csv generated successfully.\n"
     ]
    }
   ],
   "source": [
    "# 1. Generate a synthetic dataset\n",
    "np.random.seed(42)\n",
    "\n",
    "num_customers = 1000\n",
    "\n",
    "data = {\n",
    "    'CustomerID': range(1, num_customers + 1),\n",
    "    'Age': np.random.randint(18, 70, num_customers),\n",
    "    'Tenure': np.random.randint(1, 24, num_customers),\n",
    "    'MonthlyCharges': np.random.uniform(20, 150, num_customers),\n",
    "    'TotalCharges': np.random.uniform(50, 3000, num_customers),\n",
    "    'Contract': np.random.choice(['Month-to-month', 'One year', 'Two year'], num_customers),\n",
    "    'PaymentMethod': np.random.choice(['Electronic check', 'Mailed check', 'Bank transfer (automatic)', 'Credit card (automatic)'], num_customers),\n",
    "    'OnlineSecurity': np.random.choice(['Yes', 'No'], num_customers),\n",
    "    'TechSupport': np.random.choice(['Yes', 'No'], num_customers),\n",
    "    'Churn': np.random.choice([0, 1], num_customers, p=[0.8, 0.2])\n",
    "}\n",
    "\n",
    "df = pd.DataFrame(data)\n",
    "df.to_csv('customer_churn.csv', index=False)\n",
    "\n",
    "print(\"customer_churn.csv generated successfully.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Load the dataset "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_csv('customer_churn.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Data Preprocessing\n",
    "# Identify numerical and categorical columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "numerical_cols = df.select_dtypes(include=['int64', 'float64']).columns.tolist()\n",
    "categorical_cols = df.select_dtypes(include=['object']).columns.tolist()\n",
    "\n",
    "# Remove 'Churn' and 'CustomerID' safely\n",
    "if 'Churn' in numerical_cols:\n",
    "    numerical_cols.remove('Churn')\n",
    "elif 'Churn' in categorical_cols:\n",
    "    categorical_cols.remove('Churn')\n",
    "\n",
    "if 'CustomerID' in categorical_cols:\n",
    "    categorical_cols.remove('CustomerID')\n",
    "\n",
    "numerical_transformer = Pipeline(steps=[\n",
    "    ('scaler', StandardScaler())\n",
    "])\n",
    "\n",
    "categorical_transformer = Pipeline(steps=[\n",
    "    ('onehot', OneHotEncoder(handle_unknown='ignore'))\n",
    "])\n",
    "\n",
    "preprocessor = ColumnTransformer(\n",
    "    transformers=[\n",
    "        ('num', numerical_transformer, numerical_cols),\n",
    "        ('cat', categorical_transformer, categorical_cols)\n",
    "    ])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. Split the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "X = df.drop('Churn', axis=1)\n",
    "y = df['Churn']\n",
    "\n",
    "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 4. Model Training and Evaluation (Logistic Regression)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 49,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Logistic Regression Results:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.82      1.00      0.90       165\n",
      "           1       0.00      0.00      0.00        35\n",
      "\n",
      "    accuracy                           0.82       200\n",
      "   macro avg       0.41      0.50      0.45       200\n",
      "weighted avg       0.68      0.82      0.75       200\n",
      "\n",
      "[[165   0]\n",
      " [ 35   0]]\n",
      "ROC AUC: 0.4656277056277056\n"
     ]
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\sempe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\metrics\\_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n",
      "C:\\Users\\sempe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\metrics\\_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n",
      "C:\\Users\\sempe\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.11_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python311\\site-packages\\sklearn\\metrics\\_classification.py:1469: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n",
      "  _warn_prf(average, modifier, msg_start, len(result))\n"
     ]
    }
   ],
   "source": [
    "model_lr = Pipeline(steps=[('preprocessor', preprocessor),\n",
    "                           ('classifier', LogisticRegression(solver='liblinear', random_state=42))])\n",
    "model_lr.fit(X_train, y_train)\n",
    "y_pred_lr = model_lr.predict(X_test)\n",
    "y_pred_proba_lr = model_lr.predict_proba(X_test)[:, 1]\n",
    "\n",
    "print(\"\\nLogistic Regression Results:\")\n",
    "print(classification_report(y_test, y_pred_lr))\n",
    "print(confusion_matrix(y_test, y_pred_lr))\n",
    "print(f\"ROC AUC: {roc_auc_score(y_test, y_pred_proba_lr)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 5. Model Training and Evaluation (Random Forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Random Forest Results:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.82      0.99      0.90       165\n",
      "           1       0.00      0.00      0.00        35\n",
      "\n",
      "    accuracy                           0.82       200\n",
      "   macro avg       0.41      0.50      0.45       200\n",
      "weighted avg       0.68      0.82      0.74       200\n",
      "\n",
      "[[164   1]\n",
      " [ 35   0]]\n",
      "ROC AUC: 0.4526406926406927\n"
     ]
    }
   ],
   "source": [
    "model_rf = Pipeline(steps=[('preprocessor', preprocessor),\n",
    "                           ('classifier', RandomForestClassifier(random_state=42))])\n",
    "model_rf.fit(X_train, y_train)\n",
    "y_pred_rf = model_rf.predict(X_test)\n",
    "y_pred_proba_rf = model_rf.predict_proba(X_test)[:, 1]\n",
    "\n",
    "print(\"\\nRandom Forest Results:\")\n",
    "print(classification_report(y_test, y_pred_rf))\n",
    "print(confusion_matrix(y_test, y_pred_rf))\n",
    "print(f\"ROC AUC: {roc_auc_score(y_test, y_pred_proba_rf)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 6. Model Training and Evaluation (Gradient Boosting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Gradient Boosting Results:\n",
      "              precision    recall  f1-score   support\n",
      "\n",
      "           0       0.82      0.98      0.90       165\n",
      "           1       0.00      0.00      0.00        35\n",
      "\n",
      "    accuracy                           0.81       200\n",
      "   macro avg       0.41      0.49      0.45       200\n",
      "weighted avg       0.68      0.81      0.74       200\n",
      "\n",
      "[[162   3]\n",
      " [ 35   0]]\n",
      "ROC AUC: 0.45696969696969697\n"
     ]
    }
   ],
   "source": [
    "model_gb = Pipeline(steps=[('preprocessor', preprocessor),\n",
    "                           ('classifier', GradientBoostingClassifier(random_state=42))])\n",
    "model_gb.fit(X_train, y_train)\n",
    "y_pred_gb = model_gb.predict(X_test)\n",
    "y_pred_proba_gb = model_gb.predict_proba(X_test)[:, 1]\n",
    "\n",
    "print(\"\\nGradient Boosting Results:\")\n",
    "print(classification_report(y_test, y_pred_gb))\n",
    "print(confusion_matrix(y_test, y_pred_gb))\n",
    "print(f\"ROC AUC: {roc_auc_score(y_test, y_pred_proba_gb)}\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 7. Feature Importance (Random Forest)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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9913ev311xUQEKBjx47pww8/1IkTJ/Tll18a98yZM0eVK1dW69atZWdnp6+++kr9+vVTenq63n77bUnS9OnT9c4778jV1VXDhw+XJBUvXjxXz378+HF16dJFb7zxhvr27auKFSsqNTVVQUFBunDhgt544w2VLl1ae/fu1bBhw5SYmKjp06fnqq3du3dr/fr1xnOMHz9eL774osLCwjR79mz169dPly9f1qRJk9SrVy998803FvdfvnxZLVu2VKdOndSlSxetWrVKb731luzt7Y1fhf/66y8FBwfr1KlT6t+/v3x9fbV69Wr17NlTV65c0bvvvmtRZ2RkpK5fv67XX39dDg4Oateuna5evapRo0bp9ddfN76g169fX5K0evVqpaam6q233lKRIkV04MABffTRRzp//rxWr15tUfft27cVEhKiunXrasqUKdq+fbumTp2qcuXK6a233jLK9e7dW1FRUXrhhRfUp08f3bp1S7t379b333+v2rVrS5LGjRunkSNHqlOnTurTp49+//13ffTRR2rcuLF+/PFHFSxYUDdu3FBISIjS0tL0zjvvyMvLSxcuXNCGDRt05coVeXh4ZPve7N27V0WKFFGZMmVy9F5mfAEuVKiQxfkZM2aodevW6tatm27cuKEVK1bo3//+tzZs2KBWrVpZlP3uu++0du1a9evXT25ubpo5c6Y6dOigs2fPqkiRIpKkY8eO6fnnn5enp6fGjBmjW7duafTo0Vl+3vv06aPFixerY8eOGjhwoPbv36/x48crLi5OX3zxhUXZU6dOqWvXrnrjjTf0yiuvaMqUKXrppZc0d+5c/d///Z/69esn6c5ntFOnTjp+/Himvw9ZuXr1aqa/A4ULF5aNjY3+97//qVGjRnJ3d1dYWJgKFCigefPmKTg4WLt27VLdunUt7uvXr588PT01atQoXbt2TdKdqXg9evRQSEiIJk6cqNTUVM2ZM0cNGzbUjz/+aExL6dChg/73v//pnXfekY+Pjy5evKht27bp7Nmz8vHxydHfkFq1aln8bQLwiMwAAMBqvf322+a7/+f6yy+/NEsyR0REWJTr2LGj2WQymU+dOmWck2SWZD506JBx7ueffzY7Ojqa27Vr91BxuLi4mHv06JHttV69emU6//XXX5slmTdv3nzfuoOCgoxY7z4y2lu6dKnZxsbGvHv3bov75s6d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zjyP433P6Zdsa/ws3uvez2bG52vp0qVZJiDs7P7f16L33ntPL730kr788ktt2bJFI0eO1Pjx4/XNN98oMDAwR+1nfB6KFi2a20cAcBcSFwAA/I2UKVNG27dv19WrVy1GXfz000/G9btl/Mp4txMnTsjZ2fmhhvjfT40aNbR7926lp6db/Iq8f/9+OTs75/qLeoZy5crpyJEjatas2X2/WH311VdKS0vT+vXrLX4RvnsqSYbs6skY3n3lyhUVLFjQOH/vL84PijclJSXHO0w8Kb/88kumbSFPnDghScYUlDJlyujo0aOZ3svsPl9Zya5vjx07phMnTmjx4sXq3r27cX7btm0P/SwZypUrpy1btujPP//MdtRFuXLlZDab5evrm6PPYtWqVVW1alWNGDFCe/fuVYMGDTR37lxFRERke4+/v7/WrFmT47gnTJigL774QuPGjTN2dlmzZo0cHR21ZcsWi6lXkZGROa73bp6ennJycsryb8Dx48ctXpcpU0bp6ek6efKkMbpGkn777TdduXIlx4uOPi6enp5ydnbOFLd057NpY2OTabTHvTKm1RQrVixH/zbLlSungQMHauDAgTp58qRq1KihqVOn6tNPP5X04CTPmTNnVLRo0Tz7Ows87VjjAgCAv5GWLVvq9u3bmjVrlsX5Dz/8UCaTSS+88ILF+X379lnMjz937pzWrVun559/Ps9+0e7YsaN+++03rV271jh36dIlrV69Wi+99FKW6188jE6dOunChQuaP39+pmt//fWXsWNAxvPc/etuUlJSll/8XFxcdOXKlUznM77c3L0OxbVr1zJtB/qgePft26ctW7ZkunblyhXdunUrx3XlpVu3bllshXnjxg3NmzdPnp6exjooLVu21K+//qqVK1da3PfRRx/J1dVVQUFBD2wnIzFyb/9m9f6YzWbNmDEj18/UoUMHmc1mhYeHZ7qW0U779u1la2ur8PDwTL/8m81m/fHHH5Kk5OTkTO9N1apVZWNj88AtfevVq6fLly/neC2HcuXKqUOHDoqKitKvv/4q6U7/mEwmi9E9CQkJud6ZwtbWViEhIfryyy919uxZ43xcXFymz2bLli0lKdOONxmjnO7d0eRJs7W11fPPP69169ZZbPX722+/afny5WrYsKEx1SM7ISEhcnd31wcffKCbN29muv77779LklJTU41pbhnK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tWurXbt2SktLe2D8AAAAAPAw8jVxMWzYME2YMEEjR45UbGysli9fruLFixvX3dzcFBUVpdjYWM2YMUPz58/Xhx9+KOnOMP2BAweqcuXKSkxMVGJiojp37pyn8dnZ2alAgQK6ceOG0tPTVbJkSa1evVqxsbEaNWqU/u///k+rVq2SJDVu3Fhly5bV0qVLjftv3rypZcuWqVevXsa51NRUzZw5UytWrNDmzZsVHR2tdu3aaePGjdq4caOWLl2qefPm6fPPPzfu6d+/v/bt26cVK1bo6NGj+ve//60WLVro5MmTFvVOmTJFS5cu1bfffquzZ89q0KBBkqRBgwapU6dORjIjMTFR9evXN+6tVauWfHx8tGbNGknS2bNn9e233+rVV1+16I+bN28qJCREbm5u2r17t/bs2WMkSW7cuPHAdoYPH65BgwYpJiZGFSpUUJcuXYwvy4cPH1anTp308ssv69ixYxozZoxGjhxpkYzq2bOnzp07p507d+rzzz/X7NmzdfHixYd6T4sXL66QkBAtXrzY6LeVK1davEcZbGxsNHPmTP3vf//T4sWL9c033ygsLCzHbS1btkyjRo3SuHHjFBcXpw8++EAjR4402k5JSdGLL76oSpUq6fDhwxozZozxnt1P9+7d9dlnn2nmzJmKi4vTvHnzMo2OGT58uKZOnapDhw7Jzs7O4vl2796t7t27691331VsbKzmzZunqKgoI2mYnp6uF154QXv27NGnn36q2NhYTZgwQba2tpliOXfunBo1aqQqVaro888/l4ODQ6YyaWlpSk5OtjgAAAAAIKfsHlzk8bh69apmzJihWbNmGb/slytXTg0bNjTKjBgxwvhvHx8fDRo0SCtWrFBYWJicnJzk6uoqOzs7eXl55Xl8N27c0NSpU5WUlKSmTZuqQIECCg8PN677+vpq3759WrVqlTp16iRJ6t27tyIjIzV48GBJ0ldffaXr168b16U7X/7nzJmjcuXKSZI6duyopUuX6rfffpOrq6sqVaqkJk2aaOfOnercubPOnj2ryMhInT17Vt7e3pLuJCI2b96syMhIffDBB0a9c+fONert37+/xo4dK0lydXWVk5OT0tLSsu2rXr16adGiRXrllVcUFRWlli1bytPT06LMypUrlZ6ergULFshkMkmSIiMjVbBgQUVHR+v555+/bzuDBg1Sq1atJEnh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TZ069bHEUqFCBUnSTz/9pHr16j1yfQUKFLB4bTKZjKkd95PVopcvvfSSypQpo/nz58vb21vp6emqUqWKsXjn/frxUdnZ2enVV1/V6NGjtX//fn3xxRe5riu3fXLvvRlJo/T0dJUsWdKYUiPpkZM3d9fl7u6eZfsZMTzK89yv3kftk6w4ODjIwcHhoWIDAAAAgAxP7YgLPz8/OTk5aceOHZmu7d27V2XKlNHw4cNVu3Zt+fn56eeff7YoY29vr9u3b+dJLM8//7yKFi2qSZMmZXn9ypUrkqSAgADt27fPYoTGnj175ObmppIlS+a4vQIFCuQo9j/++EPHjx/XiBEj1KxZMwUEBOjy5csWZapVq6aYmBj9+eefWdbxqP3Uq1cv7dq1S23atFGhQoUyXQ8ICNC5c+csfsWPjY3VlStXVKlSpRy3k5s47ezsVL58eePISFxkVVdAQICOHDmia9euGef27NljTPWQZFFXsWLFHiqWe9vKrz4BAAAAgLz21CYuHB0dNWTIEIWFhWnJkiWKj4/X999/r4ULF8rPz09nz57VihUrFB8fr5kzZ2b6td/Hx0dnzpxRTEyMLl26pLS0tFzH4uLiogULFujrr79W69attX37diUkJOjQoUMKCwszpg3069dP586d0zvvvKOffvpJ69at0+jRozVgwACLaQMP4uPjox07dujXX3/NlIi4W6FChVSkSBF98sknOnXqlL755hsNGDDAokyXLl3k5eWltm3bas+ePTp9+rTWrFmjffv2GW09Sj8FBATo0qVLmbZGzdC8eXNVrVpV3bp10w8//KADBw6oe/fuCgoKUu3atXPcjo+Pj/bv36+EhARdunTpoUcv3FvX0aNHdfz4cV26dEk3b95Ut27d5OjoqB49eui///2vdu7cqXfeeUevvvrqfde3yA1r7BMAAAAAyK2nNnEhSSNHjtTAgQM1atQoBQQEqHPnzrp48aJat26t999/X/3791eNGjW0d+9ejRw50uLeDh06qEWLFmrSpIk8PT312WefPVIsbdq00d69e1WgQAF17dpV/v7+6tKli5KSkoxdQ/71r39p48aNOnDggKpXr64333xTvXv3tlhINCemTp2qbdu2qVSpUgoMDMy2nI2NjVasWKHDhw+rSpUqev/99zV58mSLMvb29tq6dauKFSumli1bqmrVqpowYYJsbW0l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lnTz30RWVpbS09N17dq1O87d8ePH1atXL9WvX18uLi4KDw/Xxx9/XOY+AQAAAOBu1KnuAeDuTZ06VUuXLtWiRYv061//WidOnNDBgwclSW5ublqxYoX8/f21Z88eJScny83NTZMnT9agQYO0d+9effrpp9qwYYMkycPD467HsX79ep09e1YTJ04sUderVy+Fhobq3Xff1aBBg6zl06ZN00svvaSQkBBNmzZN8fHxOnLkiOrUKd8/yU2bNsnPz0+bNm3SkSNHNGjQILVt21bJycmSpJSUFO3fv18ZGRny9/fX6tWrFRcXpz179igkJES+vr7asmWLjh8/rsDAwFL3sWrVKs2YMUOLFy9WVFSUdu3apeTkZLm4uCgxMVEFBQWKjY1V48aNtXbtWvn6+urrr7+2OYuhPFauXKmRI0cqKyur1Ppt27apQ4cO2rBhg8LDw+Xo6CgvLy81a9ZMb731liZNmiRJun79ulatWqUXX3yxzH02bNhQr7/+uuLj49WmTRs9//zzeuWVV9SkSRMlJyffce5GjRqla9eu6fPPP5eLi4v2798vV1fX2+7r6tWrunr1qvXnS5cuVWh+AAAAADzYSFzUUJcvX9Yrr7yixYsXKzExUZLUvHlz/frXv5YkTZ8+3do2KChIEydOVEZGhiZPnqy6devK1dVVderUka+v7y8eyzfffCNJCgsLK7W+VatW1jbFJk6cqJ49e0qSZs2apfDwcB05ckStWrUq1z6L78VQu3ZttWrVSj179lRmZqaSk5OVn5+v9PR05efny9/f37q/Tz/9VOnp6Zo3b55mzpypfv36KSgoSKGhoYqJiVGPHj00YMAA1ap180SkmTNnKi0tTf369ZN088yH/fv3a8mSJUpMTNQ777yjM2fOaPv27fLy8pIktWjRooKzJ4WEhNwx2dCwYUNJkre3t028hg4dqvT0dGvi4m9/+5t++uknDRw4sFz77du3rwYOHKi4uDj16tVLiYmJ5Zq7/Px89e/fXxEREZKkZs2a3XE/8+fP16xZs8o1JgAAAAD4OS4VqaEOHDigq1ev6sknnyy1/q9//as6duwoX19fubq6avr06crPz6/SMVXkPhaRkZHW935+fpKk06dPl3v78PBw1a5d26aP4u337NmjwsJChYaGytXV1frasmWL8vLyrO1zcnK0Z88ejR07Vjdu3FBiYqLi4uJUVFSkK1euKC8vT0OHDrXpY+7cudY+cnNzFRUVZU1a3K327dvf1XZJSUk6cuSItm7dKunm5R4DBw6Ui4tLuftITU1VUVGRNdFVnrkbM2aM5s6dq44dO2rmzJnavXv3HfcxdepUXbx40fr67rvv7up4AQAAADyYOOOihqpbt+5t63JycpSQkKBZs2apW7du8vDwUEZGhtLS0qpkLKGhoZJuJlMeffTREvUHDhzQr371K5syBwcH63uLxSJJFbrE4tbti/so3r6goEC1a9fWzp07bZIbkkpc0tC6dWu1bt1azz33nEaMGKFOnTppy5Yt1vEuXbpU0dHRNtsU93mnGEhSrVq1SiRzbr0PR7GKJBpu5ePjo169eik9PV3BwcH65JNPbO5FUR7Fl+YU/7c8czds2DB169ZN69at0/r16zV//nylpaVp9OjRpe7Dycmpym40CgAAAOD+R+KihgoJCVHdunWVmZmpYcOG2dRlZ2crMDBQ06ZNs5YdP37cpo2jo+Mvfkxpsa5du8rLy0tpaWklEhdr167V4cOHNWfOnErZV3lERUWpsLBQp0+fLteNKosVJyuuXLmiRo0ayd/fX99++60SEhJKbR8ZGally5bp3LlzpZ510bBhQ+3du9emLDc3t0TSpSyOjo6SVGq8hg0bpvj4eAUEBKh58+bq2LFjhfr+ufLOXZMmTTRixAiNGDHCeq+V2yUuAAAAAOCXIHFRQzk7O2vKlCmaPHmyHB0d1bFjR505c0b79u1TSEiI8vPzlZGRoYcffljr1q3T6tWrbbYPCgrS0aNHlZubq4CAALm5ud31X8VdXFy0ZMkSDR48WMOHD1dKSorc3d2VmZmpSZMmacCAAeW+70JlCA0NVUJCgoYMGaK0tDRFRUXpzJkzyszMVGRkpHr27KmRI0fK399fTzzxhAICAnTixAnNnTtXDRs2VExMjKSb994YM2aMPDw8FBcXp6tXr2rHjh06f/68xo8fr/j4eM2bN099+/bV/Pnz5efnp127dsnf318xMTF64okntHDhQr355puKiYnR22+/rb179yoqKqpCx+Pj46O6devq008/VUBAgJydna03U+3WrZvc3d01d+5czZ49+57M3bhx49S9e3eFhobq/Pnz2rRp023vbwIAAAAAvxT3uKjBUlNTNWHCBM2YMUNhYWEaNGiQTp8+rd69e+v5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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "if 'RandomForestClassifier' in str(model_rf.named_steps['classifier']):\n",
    "  try:\n",
    "      feature_names = model_rf.named_steps['preprocessor'].get_feature_names_out()\n",
    "      importances = model_rf.named_steps['classifier'].feature_importances_\n",
    "      feature_importance = pd.Series(importances, index=feature_names)\n",
    "      feature_importance = feature_importance.sort_values(ascending=False)\n",
    "\n",
    "      plt.figure(figsize=(10, 6))\n",
    "      sns.barplot(x=feature_importance[:10], y=feature_importance.index[:10])\n",
    "      plt.title('Top 10 Feature Importances (Random Forest)')\n",
    "      plt.xlabel('Importance')\n",
    "      plt.ylabel('Feature')\n",
    "      plt.show()\n",
    "\n",
    "  except AttributeError:\n",
    "    print(\"Feature importance only available for tree-based models.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 8. Example Prediction (using Gradient Boosting)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "\n",
      "Example Prediction (Gradient Boosting): Customer Churn = 0\n"
     ]
    }
   ],
   "source": [
    "example_customer = X_test.iloc[[0]]\n",
    "prediction = model_gb.predict(example_customer)\n",
    "\n",
    "print(f\"\\nExample Prediction (Gradient Boosting): Customer Churn = {prediction[0]}\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
